草庐IT

C++ volatile 放置 新

全部标签

c# - 何时使用 volatile 来抵消 C# 中的编译器优化

我花了大量时间在C#4.0中进行多线程编码。然而,有一个问题对我来说仍然没有答案。我知道volatile关键字会阻止编译器将变量存储在寄存器中,从而避免无意中读取过时的值。写入在.Net中总是易变的,因此任何说明它还避免过时写入的文档都是多余的。我也知道编译器优化有点“不可预测”。以下代码将说明由于编译器优化(在VS之外运行发布编译时)导致的停顿:classTest{publicstructData{publicint_loop;}publicstaticDatadata;publicstaticvoidMain(){data._loop=1;Testtest1=newTest();n

c# - CancellationTokenSource 与 volatile bool 值

使用CancellationTokenSource有什么好处吗?在volatile用于指示Task完成的bool字段? 最佳答案 当然可以。有许多。我会列出一些。CancellationToken支持回调。当请求取消时,您会收到通知。CancellationToken支持WaitHandle,您可以无限期地等待或超时。您可以使用CancellationTokenSource.CancelAfter方法安排取消CancellationToken。您可以将您的CancellationToken链接到另一个,这样当一个被取消时,另一个可以

c# - 何时在线程安全锁定代码中使用 'volatile' 或 'Thread.MemoryBarrier()'? (C#)

我什么时候应该使用volatile/Thread.MemoryBarrier()来保证线程安全? 最佳答案 当您想跨线程访问变量而不锁定时,您可以使用volatile/Thread.MemoryBarrier()。原子变量,例如int,总是一次性读取和写入整个变量。这意味着您永远不会在另一个线程更改它之前获得一半的值,而在它更改之后获得另一半。因此,您可以在不同线程中安全地读取和写入值,而无需同步。但是,编译器可能会优化一些读写操作,您可以使用volatile关键字来阻止这些操作。例如,如果您有这样的循环:sum=0;foreach

c# - .NET 中的变量新鲜度保证( volatile 与 volatile 读取)

我已经阅读了许多关于volatile和VoletileRead(ReadAcquireFence)的相互矛盾的信息(msdn、SO等)。我理解那些内存访问重新排序限制的含义-我仍然完全困惑的是新鲜度保证-这对我来说非常重要。msdndocforvolatile提及:(...)Thisensuresthatthemostup-to-datevalueispresentinthefieldatalltimes.msdndocforvolatilefields提及:Areadofavolatilefieldiscalledavolatileread.Avolatilereadhas"acqu

c# - 为什么局部变量在 C# 中不能是 volatile 的?

publicvoidMyTest(){booleventFinished=false;myEventRaiser.OnEvent+=delegate{doStuff();eventFinished=true;};myEventRaiser.RaiseEventInSeperateThread()while(!eventFinished)Thread.Sleep(1);Assert.That(stuff);}为什么eventFinished不能是易变的,这有关系吗?在我看来,在这种情况下,编译器或运行时可能会为了自己的利益而变得聪明,并在while循环中“知道”eventFinished

c# - 有没有办法让 CodeDom 在命名空间之前放置 using 语句

msdn文档说将namespace导入添加到CodeNamespace.Imports集合。这将它们放在命名空间中(这是有道理的,因为您将它们添加到命名空间中)namespaceFoo{usingBar;//Code}然而,我们的代码库的其余部分在命名空间之外有using语句:usingBar;namespaceFoo{//Code}是否有一种干净的方法让CodeDom发出第二个版本?编辑:生成第一个示例的代码如下所示:CodeNamespacens=newCodeNamespace("Foo");ns.Imports.Add(newCodenamespaceImport("Bar")

javascript - vis.js - 手动放置节点

如何在vis.js中设置节点的位置?我想手动定位至少一个节点。我知道一个节点有选项x和y。我设置了两者,还尝试了layout选项的变体(randomSeed、improvedLayout、hierarchical),节点是从来没有放在我设置的地方。这是我定义的简单网络:nodes=newvis.DataSet([{id:1,shape:'circularImage',image:DIR+'1_circle',label:"1",x:200,y:100},{id:2,shape:'circularImage',image:DIR+'2_circle',label:"2"},{id:3,s

javascript - 在 Google map 上放置街景 View 按钮

如何在相当典型的Googlemap上放置街景View按钮,使其与右上角的标准map/卫星/混合按钮一致?我见过这样的一个例子,但我再也找不到了。所以,我知道这是可能的。 最佳答案 是的,确实可以在map的选项中指定控制位置——在onlinedocs中寻找控制定位.如何指定谷歌地图控件位置用于在右上角定位街景控件streetViewControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT}到您的map选项。查看此演示(使用GooglemapAPI第3版):varmyL

javascript - 彼此靠近放置可调整大小的圆圈

我正在进行这个基于浏览器的实验,在这个实验中,我得到了N个特定的圆圈(假设它们中有一张独特的图片)并且需要将它们放在一起,并在它们之间留出尽可能小的空间。不一定要排成一圈,但要“簇”在一起。圆的大小是可定制的,用户可以通过拖动javascriptslider来更改大小,更改一些圆的大小(例如,在slider的10%中,圆4的半径为20px,圆210px,圆圈5保持不变,等等......)。正如您可能已经猜到的那样,我将尝试在移动slider时平滑地“过渡”调整大小-重新定位。到目前为止,我尝试过的方法是:我没有手动尝试定位它们,而是尝试使用物理引擎-想法:在屏幕中央放置某种引力使用物理

javascript - 将元素拖放到 iframe 中。可放置区域坐标错误,碰撞错误

我需要在Web应用程序中实现网页中存在的元素和iframe中的元素之间的拖放功能(在你开始提示iframe之前,出于技术原因我需要它,这不是一个选项)。我在页面中有一些元素可以拖到iframe内的目标可放置元素中。我已经设法用jQueryUI和YUI做到了,尽管这两个库都存在同样的问题:目标元素(可放置目标)坐标被误解,两个库考虑的放置区域都是错误的,并不代表实际可放置的对象,因此被拖动的对象和放置的元素之间的碰撞完全困惑了。这就像库看到可放置元素位于它有效所在的另一个位置。我认为这是由于iframe没有位于页面的左上角,而是位于中间。我认为这是因为我读过很多人提示这个问题,如果ifr